package org.eclipse.jdt.internal.corext.refactoring.codingspectator; import org.eclipse.core.runtime.CoreException; import org.eclipse.ltk.core.refactoring.codingspectator.CodeSnippetInformation; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.ITypeRoot; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil; /** * * @author Mohsen Vakilian * @author nchen * */ public class StructuredSelectionCodeSnippetInformationExtractor extends CodeSnippetInformationExtractor { private String selectedText; private IJavaElement selectedElement; public StructuredSelectionCodeSnippetInformationExtractor(ITypeRoot typeRoot, IJavaElement selectedElement, String selectedText) { this.typeRoot= typeRoot; this.selectedElement= selectedElement; this.selectedText= selectedText; } public CodeSnippetInformation extractCodeSnippetInformation() { if (isSelectedElementInsideACompilationUnit()) { return new CodeSnippetInformation(getCodeSnippet(), selectedText); } else { return new CodeSnippetInformation(selectedText); } } /** * * @see org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil#getDeclarationNodes(IJavaElement, * CompilationUnit) * */ private boolean isSelectedElementInsideACompilationUnit() { if (selectedElement == null) { return false; } switch (selectedElement.getElementType()) { case IJavaElement.FIELD: case IJavaElement.IMPORT_CONTAINER: case IJavaElement.IMPORT_DECLARATION: case IJavaElement.INITIALIZER: case IJavaElement.METHOD: case IJavaElement.PACKAGE_DECLARATION: case IJavaElement.TYPE: return true; default: return false; } } protected ASTNode findTargetNode() throws CoreException { if (selectedElement == null) { return null; } ASTNode[] declarationNodes= null; declarationNodes= ASTNodeSearchUtil.getDeclarationNodes(selectedElement, getCompilationUnitASTFromTypeRoot()); if (declarationNodes == null || declarationNodes.length == 0) { return null; } ASTNode node= declarationNodes[0]; return node; } }